package 综合练习题3;

import java.io.Serializable;
import java.util.*;
import java.util.stream.Collectors;

// 订单处理系统类，包含订单过滤、合并和统计等功能
public class OrderProcessingSystem {
    // 过滤出指定城市用户的订单
    public static <T extends Serializable> List<Order<T>> filterOrdersByCity(List<Order<T>> orders, String city) {
        return orders.stream()
               .filter(order -> {
                    T userInfo = order.getUserInfo();
                    // 检查用户信息是否为 User 类型
                    if (userInfo instanceof User) {
                        User user = (User) userInfo;
                        return user.getCity().equals(city);
                    }
                    return false;
                })
               .collect(Collectors.toList());
    }

    // 合并多个订单列表（保留唯一订单）
    public static <T extends Serializable> List<Order<T>> mergeOrders(List<List<Order<T>>> orderLists) {
        return orderLists.stream()
               .flatMap(List::stream)
               .distinct()
               .collect(Collectors.toList());
    }

    // 统计各城市的订单数量
    public static <T extends Serializable> Map<String, Integer> countOrdersByCity(List<Order<T>> orders) {
        Map<String, Integer> cityOrderCount = new HashMap<>();
        orders.forEach(order -> {
            T userInfo = order.getUserInfo();
            // 检查用户信息是否为 User 类型
            if (userInfo instanceof User) {
                User user = (User) userInfo;
                String city = user.getCity();
                // 使用 Map.merge 方法统计各城市的订单数量
                cityOrderCount.merge(city, 1, Integer::sum);
            }
        });
        return cityOrderCount;
    }
}